﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;
using DTO;
using System.Data.SqlClient;

namespace Persistence
{
    public class Helper
    {
        //Realiza un update en el campo de la tabla seleccionada, con la condicion fijada y en el valor establecido. Tambien recibe
        //un valor que indica el limite en el que debe truncar el texto ingresado como valor.
        public static void updateProperty(string pTable, string pField, string pFieldValue, string pFieldConditional, long pId, int limit)
        {
            //Se obtiene una conexion y un comando
            DBConnection dbConn = DBConnection.getInstance();
            MySqlCommand cmd = dbConn.createCommand();
            //Se define el comando a utilizar.
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proupVARCHARfields_ATS";
            //Se cargan los valores de los paratros del procedimiento.
            cmd.Parameters.AddWithValue("ptablename", pTable);
            cmd.Parameters.AddWithValue("pfieldname", pField);
            cmd.Parameters.AddWithValue("pfieldvalue", truncate(pFieldValue, limit));
            cmd.Parameters.AddWithValue("pfieldcondition", pFieldConditional);
            cmd.Parameters.AddWithValue("pfieldid", Convert.ToInt16(pId));
            dbConn.executeNonQueryCommand(cmd);
        }

        //Sobrecarga del metodo definido anteriormente que se encarga de actualizar los campos de tipo entero.
        public static void updateProperty(string pTable, string pField, long pFieldValue, string pFieldConditional, long pId)
        {
            //Se obtiene una conexion y un comando
            DBConnection dbConn = DBConnection.getInstance();
            MySqlCommand cmd = dbConn.createCommand();
            //Se define el comando a utilizar.
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proupINTfields_ATS";
            //Se cargan los valores de los paratros del procedimiento.
            cmd.Parameters.AddWithValue("ptablename", pTable);
            cmd.Parameters.AddWithValue("pfieldname", pField);
            cmd.Parameters.AddWithValue("pfieldvalue", Convert.ToInt16(pFieldValue));
            cmd.Parameters.AddWithValue("pfieldcondition", pFieldConditional);
            cmd.Parameters.AddWithValue("pfieldid", Convert.ToInt16(pId));
            dbConn.executeNonQueryCommand(cmd);
        }
        //Sobrecarga del metodo que permite actualizar datos decimales.
        public static void updateProperty(string pTable, string pField, float pFieldValue, string pFieldConditional, long pId)
        {
            //Se obtiene una conexion y un comando
            DBConnection dbConn = DBConnection.getInstance();
            MySqlCommand cmd = dbConn.createCommand();
            //Se define el comando a utilizar.
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proupINTfields_ATS";
            //Se cargan los valores de los paratros del procedimiento.
            cmd.Parameters.AddWithValue("ptablename", pTable);
            cmd.Parameters.AddWithValue("pfieldname", pField);
            cmd.Parameters.AddWithValue("pfieldvalue", Convert.ToDecimal(pFieldValue));
            cmd.Parameters.AddWithValue("pfieldcondition", pFieldConditional);
            cmd.Parameters.AddWithValue("pfieldid", Convert.ToInt16(pId));
            dbConn.executeNonQueryCommand(cmd);
        }

        private static string truncate(string unSt, int maxLength)
        {
            return unSt.Length <= maxLength ? unSt : unSt.Substring(0, maxLength);
        }
    }
}
